using System.Collections.Generic;
using System.Reflection;
using System.Xml.Schema;
using Sixeyed.CodeGeneration.Metadata.Interfaces;

namespace Sixeyed.CodeGeneration.Metadata.Wsdl.Interfaces
{
    /// <summary>
    /// Represents a WSDL metadata source
    /// </summary>
    public interface IWsdlSource : IMetadataSource
    {
        /// <summary>
        /// Returns a list of schemas available from the WSDL endpoint
        /// </summary>
        /// <returns>Schema name list</returns>
        List<string> GetSchemaNames();

        /// <summary>
        /// Returns an XML schema from the WSDL endpoint
        /// </summary>
        /// <param name="targetNamespace">Namespace of schema to return</param>
        /// <returns>XML schema</returns>
        XmlSchema GetSchema(string targetNamespace);

        /// <summary>
        /// Returns a list of web service methods from the endpoint
        /// </summary>
        /// <returns>Method name list</returns>
        List<string> GetWebMethodNames();

        /// <summary>
        /// Returns a representation of the given web service method
        /// </summary>
        /// <param name="methodName">Name of method to return</param>
        /// <returns>Web method info</returns>
        MethodInfo GetWebMethod(string methodName);
    }
}
